// Node.js环境使用示例
import { KSpaceClient } from '../src';
import * as fs from 'fs';
import * as path from 'path';

// 配置信息
const config = {
  endpoint: 'oss.example.com',
  accessKeyId: 'your-access-key-id',
  accessKeySecret: 'your-access-key-secret',
  bucket: 'your-bucket-name',
  region: 'us-west-1',
  secure: true
};

// 创建客户端实例
const client = new KSpaceClient(config);

/**
 * 单个文件上传示例
 */
async function uploadSingleFile() {
  try {
    console.log('=== 单个文件上传示例 ===');
    
    // 读取本地文件
    const filePath = path.join(__dirname, 'test.jpg');
    if (!fs.existsSync(filePath)) {
      console.log('测试文件不存在，请先创建 test.jpg 文件');
      return;
    }
    
    const fileBuffer = fs.readFileSync(filePath);
    
    console.log(`开始上传文件，大小: ${fileBuffer.length} bytes`);
    
    // 上传文件
    const result = await client.upload({
      file: fileBuffer,
      key: `test-uploads/${Date.now()}-test.jpg`,
      storageClass: 'Standard',
      meta: {
        description: '测试上传文件',
        environment: 'nodejs'
      },
      onProgress: (progress, total, loaded) => {
        console.log(`上传进度: ${progress}%, 已上传: ${loaded}/${total} bytes`);
      }
    });
    
    console.log('上传成功!');
    console.log('上传结果:', result);
    console.log('文件URL:', result.url);
    
  } catch (error) {
    console.error('上传失败:', error);
  }
}

/**
 * 批量文件上传示例
 */
async function uploadMultipleFiles() {
  try {
    console.log('\n=== 批量文件上传示例 ===');
    
    // 准备文件
    const files = [
      {
        file: Buffer.from('This is test content 1', 'utf8'),
        key: `test-uploads/${Date.now()}-test1.txt`
      },
      {
        file: Buffer.from('This is test content 2', 'utf8'),
        key: `test-uploads/${Date.now()}-test2.txt`
      }
    ];
    
    console.log(`准备上传 ${files.length} 个文件`);
    
    // 批量上传
    const results = await client.uploadFiles(files as any);
    
    console.log('批量上传成功!');
    results.forEach((result, index) => {
      console.log(`文件 ${index + 1}:`);
      console.log(`  - 路径: ${result.key}`);
      console.log(`  - URL: ${result.url}`);
      console.log(`  - 大小: ${result.size} bytes`);
    });
    
  } catch (error) {
    console.error('批量上传失败:', error);
  }
}

/**
 * 文件信息获取示例
 */
async function getFileInfoExample() {
  try {
    console.log('\n=== 文件信息获取示例 ===');
    
    const fileKey = 'test-uploads/example.jpg'; // 替换为实际存在的文件路径
    const fileInfo = await client.getFileInfo(fileKey);
    
    console.log('文件信息:');
    console.log(`- 路径: ${fileInfo.key}`);
    console.log(`- 大小: ${fileInfo.size} bytes`);
    console.log(`- 最后修改时间: ${fileInfo.lastModified.toISOString()}`);
    console.log(`- ETag: ${fileInfo.etag}`);
    console.log(`- Content-Type: ${fileInfo.contentType}`);
    console.log(`- 存储类型: ${fileInfo.storageClass}`);
    
  } catch (error) {
    console.error('获取文件信息失败:', error);
  }
}

/**
 * 文件删除示例
 */
async function deleteFileExample() {
  try {
    console.log('\n=== 文件删除示例 ===');
    
    const fileKey = 'test-uploads/file-to-delete.txt'; // 替换为要删除的文件路径
    const success = await client.deleteFile(fileKey);
    
    if (success) {
      console.log(`文件 ${fileKey} 删除成功`);
    }
    
  } catch (error) {
    console.error('删除文件失败:', error);
  }
}

/**
 * 生成文件URL示例
 */
function generateUrlExample() {
  console.log('\n=== 生成文件URL示例 ===');
  
  const fileKey = 'test-uploads/example.jpg';
  
  // 生成永久URL
  const permanentUrl = client.getFileUrl(fileKey);
  console.log('永久URL:', permanentUrl);
  
  // 生成临时URL（1小时过期）
  const temporaryUrl = client.getFileUrl(fileKey, 3600);
  console.log('临时URL (1小时过期):', temporaryUrl);
  
  // 生成临时URL（24小时过期）
  const oneDayUrl = client.getFileUrl(fileKey, 24 * 3600);
  console.log('临时URL (24小时过期):', oneDayUrl);
}

/**
 * 运行所有示例
 */
async function runAllExamples() {
  try {
    console.log('===== KSpace-Client Node.js 使用示例 =====\n');
    
    // 注意：在实际使用前，请确保修改配置信息
    console.log('提示：请先修改配置信息中的endpoint、accessKeyId、accessKeySecret和bucket');
    
    // 按顺序运行示例
    // await uploadSingleFile();
    // await uploadMultipleFiles();
    // await getFileInfoExample();
    // await deleteFileExample();
    generateUrlExample();
    
  } catch (error) {
    console.error('运行示例时出错:', error);
  }
}

// 运行示例
runAllExamples();